/*
 *      SObject.h
 *
 *      Copyright 2009 virpool <virpool@ukrpost.ua>
 *
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *      (at your option) any later version.
 *
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 *      MA 02110-1301, USA.
 */

#ifndef __SOBJECT_H_
#define __SOBJECT_H_

#include <iostream>
#include <string>
#include <map>
#include <list>
#include "STypes.h"

using namespace std;

class SObject
{
	string name;
	string classname;
	map<string, s_func> methods;
protected:
	static int DefToString(SObject*, s_param*, param_list*);
	static int ClassName(SObject*, s_param*, param_list*);

	static int AddMethod(SObject*, string, s_func);
public:
	SObject(string, string);
	virtual ~SObject();
	map<string, s_func>* GetMethods() { return &methods;}
	string GetClassName() { return classname; }
	int Invoke(string, s_param*, param_list*);

	bool operator > (const SObject *a);
	bool operator < (const SObject *a);
	bool operator == (const SObject *a);
};

#endif
